From e3ddbc544cef0570b9f6a46e1ad7bec275c99881 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 27 Oct 2015 20:11:08 +0100 Subject: [PATCH] cssselector: Print name and any selector first When printing a "compound selector", make sure the name and universal selectors are printed at the beginning and class, id, etc. selectors are printed last. --- gtk/gtkcssselector.c | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/gtk/gtkcssselector.c b/gtk/gtkcssselector.c index 3be62ee15d..a185cd618b 100644 --- a/gtk/gtkcssselector.c +++ b/gtk/gtkcssselector.c @@ -1700,15 +1700,41 @@ void _gtk_css_selector_tree_match_print (const GtkCssSelectorTree *tree, GString *str) { - const GtkCssSelectorTree *parent; + const GtkCssSelectorTree *iter; g_return_if_fail (tree != NULL); - tree->selector.class->print (&tree->selector, str); + /* print name and * selector before others */ + for (iter = tree; + iter && iter->selector.class->is_simple; + iter = gtk_css_selector_tree_get_parent (iter)) + { + if (iter->selector.class == >K_CSS_SELECTOR_NAME || + iter->selector.class == >K_CSS_SELECTOR_ANY) + { + iter->selector.class->print (&iter->selector, str); + } + } + /* now print other simple selectors */ + for (iter = tree; + iter && iter->selector.class->is_simple; + iter = gtk_css_selector_tree_get_parent (iter)) + { + if (iter->selector.class != >K_CSS_SELECTOR_NAME && + iter->selector.class != >K_CSS_SELECTOR_ANY) + { + iter->selector.class->print (&iter->selector, str); + } + } - parent = gtk_css_selector_tree_get_parent (tree); - if (parent != NULL) - _gtk_css_selector_tree_match_print (parent, str); + /* now if there's a combinator, print that one */ + if (iter != NULL) + { + iter->selector.class->print (&iter->selector, str); + tree = gtk_css_selector_tree_get_parent (iter); + if (tree) + _gtk_css_selector_tree_match_print (tree, str); + } } void -- 2.30.2